/* 
 * File:   PalabraAleatoria.cpp
 * Author: root
 * 
 * Created on September 15, 2012, 7:23 PM
 */

#include "PalabraAleatoria.h"
#include<cstring>
#include<fstream>

using std::ofstream;
using std::ifstream;

void PalabraAleatoria::setPalabra(char* p){
    if(!p)
        return;
    
    const unsigned int TAM_P= strlen(p);
    if(TAM_P>TAM_PALABRA)
        return;
    strcpy(palabra,p);
}//setPalabra

char* PalabraAleatoria::getPalabra(){
    return palabra;
}//getPalabra

void PalabraAleatoria::setIdentificador(unsigned long id){
    if(!id)
        return;
    
    identificador= id;
}//setIdentificador

unsigned long PalabraAleatoria::getIdentificador(){
    return identificador;
}//getIdentificador

unsigned int PalabraAleatoria::getLongitudPalabra(){
    if(!palabra)
        return 0;
    return strlen(palabra);
}//getLongitudPalabra

bool PalabraAleatoria::operator <(const PalabraAleatoria& pa){
    if(this->identificador < pa.identificador)
        return true;
    if(this->identificador > pa.identificador)
        return false;
    
    const int COMP_PALABRAS= strcmp(this->palabra,pa.palabra);
    if(COMP_PALABRAS<= 0 )
        return true;
    //claves y palabras son iguales, retorna true considero <=
    
    return false;
}//<


bool PalabraAleatoria::operator >(const PalabraAleatoria& pa){
    return ( !( (*this)<pa ) );
}// >

int PalabraAleatoria::guardar(char* direccionArchivo){
    if(!direccionArchivo)
        return DIR_ERRONEA;
    
    ofstream salida(direccionArchivo,ofstream::app);
    if(!salida.is_open())
        return ARCH_INVALIDO;
    
    salida.write((char*)this,TAM_REGISTRO);
    salida.close();
    return EXITO;
    
}//guardar

int PalabraAleatoria::guardar(ofstream* salida){
    if(!salida->is_open())
        return ARCH_INVALIDO;
    
    salida->write((char*)this,TAM_REGISTRO);
    return EXITO;
}//guardar

PalabraAleatoria::PalabraAleatoria(char* p, unsigned long id){
    strcpy(palabra,"*****");
    identificador= 0;
    setPalabra(p);
    setIdentificador(id);
}//constructor

PalabraAleatoria::PalabraAleatoria(const PalabraAleatoria& pa){
    if(pa.palabra)
        strcpy(this->palabra,pa.palabra);
    
    this->identificador= pa.identificador;
}//constructor

//------------------------

int guardarPalabrasAleatorias(PalabraAleatoria* palabrasAleatorias
,unsigned int cantidad,char* direccionArchivo,MODO_GUARDADO modo){
    if(!direccionArchivo)
        return PalabraAleatoria::DIR_ERRONEA;
    
    ofstream* salida;
    switch(modo){
        case SOBREESCRIBIR:
            salida= new ofstream(direccionArchivo,ofstream::binary);
            break;
        case AGREGAR:
            salida= new ofstream(direccionArchivo,ofstream::app);
            break;
    }//switch
    
    if(!salida->is_open())
        return PalabraAleatoria::ARCH_INVALIDO;
    
    salida->write((char*)palabrasAleatorias,cantidad*PalabraAleatoria::TAM_REGISTRO);
    
    delete salida;
    
}//guardarPalabrasAleatorias

PalabraAleatoria::PalabraAleatoria(){
    strcpy(this->palabra,"***");
    this->identificador= 0;
}//constructor
